package com.qb.common.widget

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.view.Gravity
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.AppUtils
import com.gyf.immersionbar.ImmersionBar
import com.qb.baselibrary.R
import com.qb.common.constant.Constants
import com.qb.common.router.RouterPath
import com.qb.common.widget.dialog.CustomDialog


// ┏┓　　　┏┓
// ┏┛┻━━━┛┻┓
// ┃　　　　　　　┃ 　
// ┃　　　━　　　┃
// ┃　┳┛　┗┳　┃
// ┃　　　　　　　┃
// ┃　　　┻　　　┃
// ┃　　　　　　　┃
// ┗━┓　　　┏━┛
// ┃　　　┃ 神兽保佑　　　　　　　　
// ┃　　　┃ 代码无BUG！
// ┃　　　┗━━━┓
// ┃　　　　　　　┣┓
// ┃　　　　　　　┏┛
// ┗┓┓┏━┳┓┏┛
// ┃┫┫　┃┫┫
// ┗┻┛　┗┻┛
/**
 * @Author:qiaobin
 * @Description: 当前页面主体功能
 * @Create Time: 2021/8/6 5:22 下午
 * @Modified by: qiaobin
 * @Modified Time:2021/8/6 5:22 下午
 * @Package name: StartApp
 */
object PopUtils {
    /**
     * 通用弹窗
     */
    fun customDialog(mContext: Context,title:String?,content:String?,sure:String?,cancle:String,isSure:Boolean,isCancle:Boolean){
        val customDialog = CustomDialog(
            mContext,
            R.layout.base_dialog, intArrayOf(
                R.id.tv_title,
                R.id.tv_content,
                R.id.btn_sure,
                R.id.img_line,
                R.id.btn_cancle,
            ),
            R.style.base_bottom_animation,
            false,
            true,
            Gravity.BOTTOM, 0
        )
        ImmersionBar.with( mContext as Activity, customDialog).init()
        customDialog.show()
        val allViews = customDialog.views
        var tv_title = allViews[0] as TextView
        var tv_content = allViews[1] as TextView
        var btn_sure = allViews[2] as Button
        var img_line = allViews[3] as ImageView
        var btn_cancle = allViews[4] as Button
        if (title.isNullOrEmpty()){
            tv_title.visibility = View.GONE
        }else{
            tv_title.visibility = View.VISIBLE
        }
    }

    /**
     * 通用弹窗
     */
    fun customDialog(mContext: Context,title:String?,content:String?,commonCallBack: CommonCallBack){
        val customDialog = CustomDialog(mContext, R.layout.base_dialog, intArrayOf(
            R.id.tv_title,
            R.id.tv_content,
            R.id.btn_sure,
            R.id.img_line,
            R.id.btn_cancle,
            R.id.iv_close,
        ),
            R.style.base_bottom_animation,
            false,
            true,
            Gravity.CENTER,-1
        )
//        ImmersionBar.with( mContext as Activity, customDialog).init()
        customDialog.show()
        val allViews = customDialog.views
        var tv_title = allViews[0] as TextView
        var tv_content = allViews[1] as TextView
        var btn_sure = allViews[2] as Button
        var img_line = allViews[3] as ImageView
        var btn_cancle = allViews[4] as Button
        var iv_close = allViews[5] as ImageView
        if (title.isNullOrEmpty()){
            tv_title.visibility = View.GONE
        }else{
            tv_title.visibility = View.VISIBLE
            tv_title.text = title
        }
        val agreementText = """
    亲爱的用户，感谢您信任并使用零一！
    我们依据相关法律制定了《零一隐私政策》，
    请您在点击同意之前仔细阅读并充分理解相关条款，
    其中的重点条款已为您标注，方便您了解自己的权利。
    我们将通过零一隐私政策向您说明：
    1.为了您可以更好地享受零一服务，
    我们会根据您的授权内容，收集和使用对应的必要信息（例如您的联系电话位置信息、配送地址等）。
    2.您可以对上述信息进行访问、更正、删除以及注销账户。
    我们也将提供专门的个人信息保护联系方式。
    3.未经您的授权同意，我们不会将上述信息共享给第三方或用于您未授权的其他用途。
    零一
""".trimIndent()

        val spannableBuilder = SpannableStringBuilder(agreementText)

        val privacyPolicyClickableSpan = object : ClickableSpan() {
            override fun onClick(widget: View) {
                // 在这里处理点击事件，比如打开一个链接或者弹出一个对话框
                // 这里可以写打开隐私政策的代码
//                mContext.startActivity(Intent(mContext, ContentActivity::class.java).apply {
//                    putExtra(Constants.CONTENT_URL_KEY, "http://xkys.shiyifacai.com/")
//                    putExtra(Constants.CONTENT_TITLE_KEY, "协议")
//                })
//                ARouter.getInstance().build(RouterPath.Common.URL_Common_WebViewActivity).navigation()
                // 目标 Activity 的完整包名和类名
                val packageName = AppUtils.getAppPackageName()
                val className = "com.qb.common.ui.activity.WebViewActivity"
                // 创建一个 Intent
                val intent = Intent().apply {
                    setClassName(packageName, className)
                }
                // 启动目标 Activity
                mContext.startActivity(intent)
            }

            override fun updateDrawState(ds: TextPaint) {
                super.updateDrawState(ds)
                // 设置下划线
                ds.isUnderlineText = true
            }
        }

// 找到 "《零一隐私政策》" 这个字符串并设置点击事件和下划线样式
        val privacyPolicyStart = agreementText.indexOf("《零一隐私政策》")
        val privacyPolicyEnd = privacyPolicyStart + "《零一隐私政策》".length
        spannableBuilder.setSpan(
            privacyPolicyClickableSpan,
            privacyPolicyStart,
            privacyPolicyEnd,
            SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE
        )

// 将 Spannable 设置到 TextView 上
        tv_content.text = spannableBuilder
        tv_content.movementMethod = LinkMovementMethod.getInstance()
        customDialog.setOnDialogItemClickListener { dialog, view ->
            when(view.id){
                btn_sure.id->{
                    commonCallBack.sure("")
                    customDialog.dismiss()
                }
                btn_cancle.id->{
                    commonCallBack.cancle()
                    customDialog.dismiss()
                }
                iv_close.id->{
                    commonCallBack.cancle()
                    customDialog.dismiss()
                }
            }
        }
    }

    interface CommonCallBack{
        fun sure(sure: String)
        fun cancle()
    }
    interface ChooseTimeCallBack{
        fun timeResult(time:String)
    }
}